1 module geany_d_binding.geany.keybindings;
2 
3 import geany_d_binding.geany.types;
4 import gdk.Gdk: GdkModifierType, GDestroyNotify;
5 import gtk.Widget: GtkWidget;
6 
7 extern(System) nothrow:
8 
9 /** Keybinding group IDs for use with keybindings_send_command(). */
10 /* These IDs are used to lookup a group. */
11 enum GeanyKeyGroupID
12 {
13     GEANY_KEY_GROUP_FILE,           /**< Group. */
14     GEANY_KEY_GROUP_PROJECT,        /**< Group. */
15     GEANY_KEY_GROUP_EDITOR,         /**< Group. */
16     GEANY_KEY_GROUP_CLIPBOARD,      /**< Group. */
17     GEANY_KEY_GROUP_SELECT,         /**< Group. */
18     GEANY_KEY_GROUP_FORMAT,         /**< Group. */
19     GEANY_KEY_GROUP_INSERT,         /**< Group. */
20     GEANY_KEY_GROUP_SETTINGS,       /**< Group. */
21     GEANY_KEY_GROUP_SEARCH,         /**< Group. */
22     GEANY_KEY_GROUP_GOTO,           /**< Group. */
23     GEANY_KEY_GROUP_VIEW,           /**< Group. */
24     GEANY_KEY_GROUP_FOCUS,          /**< Group. */
25     GEANY_KEY_GROUP_NOTEBOOK,       /**< Group. */
26     GEANY_KEY_GROUP_DOCUMENT,       /**< Group. */
27     GEANY_KEY_GROUP_BUILD,          /**< Group. */
28     GEANY_KEY_GROUP_TOOLS,          /**< Group. */
29     GEANY_KEY_GROUP_HELP,           /**< Group. */
30     GEANY_KEY_GROUP_COUNT   /* must not be used by plugins */
31 }
32 
33 /** Keybinding command IDs for use with keybindings_send_command(). */
34 /* These IDs are used to lookup a keybinding. */
35 enum GeanyKeyBindingID
36 {
37     GEANY_KEYS_EDITOR_TRANSPOSELINE,            /**< Keybinding. */
38     GEANY_KEYS_DOCUMENT_REMOVE_ERROR_INDICATORS, /**< Keybinding. */
39     GEANY_KEYS_FOCUS_SEARCHBAR,                 /**< Keybinding. */
40     GEANY_KEYS_SEARCH_FIND,                     /**< Keybinding. */
41     GEANY_KEYS_FILE_SAVEALL,                    /**< Keybinding. */
42     GEANY_KEYS_GOTO_NEXTMARKER,                 /**< Keybinding. */
43     GEANY_KEYS_NOTEBOOK_SWITCHTABLEFT,          /**< Keybinding. */
44     GEANY_KEYS_VIEW_ZOOMOUT,                    /**< Keybinding. */
45     GEANY_KEYS_GOTO_LINE,                       /**< Keybinding. */
46     GEANY_KEYS_DOCUMENT_TOGGLEFOLD,             /**< Keybinding. */
47     GEANY_KEYS_BUILD_COMPILE,                   /**< Keybinding. */
48     GEANY_KEYS_EDITOR_SCROLLTOLINE,             /**< Keybinding. */
49     GEANY_KEYS_DOCUMENT_UNFOLDALL,              /**< Keybinding. */
50     GEANY_KEYS_GOTO_MATCHINGBRACE,              /**< Keybinding. */
51     GEANY_KEYS_SEARCH_FINDDOCUMENTUSAGE,        /**< Keybinding. */
52     GEANY_KEYS_CLIPBOARD_PASTE,                 /**< Keybinding. */
53     GEANY_KEYS_BUILD_MAKE,                      /**< Keybinding. */
54     GEANY_KEYS_INSERT_ALTWHITESPACE,            /**< Keybinding. */
55     GEANY_KEYS_EDITOR_SCROLLLINEDOWN,           /**< Keybinding. */
56     GEANY_KEYS_VIEW_TOGGLEALL,                  /**< Keybinding. */
57     GEANY_KEYS_VIEW_FULLSCREEN,                 /**< Keybinding. */
58     GEANY_KEYS_GOTO_LINEEND,                    /**< Keybinding. */
59     GEANY_KEYS_EDITOR_CALLTIP,                  /**< Keybinding. */
60     GEANY_KEYS_FILE_PRINT,                      /**< Keybinding. */
61     GEANY_KEYS_EDITOR_DUPLICATELINE,            /**< Keybinding. */
62     GEANY_KEYS_FOCUS_SCRIBBLE,                  /**< Keybinding. */
63     GEANY_KEYS_TOOLS_OPENCOLORCHOOSER,          /**< Keybinding. */
64     GEANY_KEYS_SEARCH_PREVIOUSMESSAGE,          /**< Keybinding. */
65     GEANY_KEYS_FILE_CLOSE,                      /**< Keybinding. */
66     GEANY_KEYS_DOCUMENT_REPLACETABS,            /**< Keybinding. */
67     GEANY_KEYS_FILE_RELOAD,                     /**< Keybinding. */
68     GEANY_KEYS_SEARCH_FINDNEXTSEL,              /**< Keybinding. */
69     GEANY_KEYS_FOCUS_MESSAGES,                  /**< Keybinding. */
70     GEANY_KEYS_BUILD_RUN,                       /**< Keybinding. */
71     GEANY_KEYS_HELP_HELP,                       /**< Keybinding. */
72     GEANY_KEYS_SETTINGS_PLUGINPREFERENCES,      /**< Keybinding. */
73     GEANY_KEYS_VIEW_ZOOMRESET,                  /**< Keybinding. */
74     GEANY_KEYS_SELECT_WORD,                     /**< Keybinding. */
75     GEANY_KEYS_FORMAT_INCREASEINDENT,           /**< Keybinding. */
76     GEANY_KEYS_SETTINGS_PREFERENCES,            /**< Keybinding. */
77     GEANY_KEYS_FORMAT_SENDTOCMD3,               /**< Keybinding. */
78     GEANY_KEYS_DOCUMENT_FOLDALL,                /**< Keybinding. */
79     GEANY_KEYS_FORMAT_SENDTOVTE,                /**< Keybinding. */
80     GEANY_KEYS_PROJECT_PROPERTIES,              /**< Keybinding. */
81     GEANY_KEYS_DOCUMENT_LINEWRAP,               /**< Keybinding. */
82     GEANY_KEYS_EDITOR_MACROLIST,                /**< Keybinding.
83                                                  * @deprecated 1.25, it doesn't do anything anymore */
84     GEANY_KEYS_EDITOR_SUPPRESSSNIPPETCOMPLETION, /**< Keybinding. */
85     GEANY_KEYS_FOCUS_SIDEBAR_SYMBOL_LIST,       /**< Keybinding. */
86     GEANY_KEYS_GOTO_LINESTART,                  /**< Keybinding. */
87     GEANY_KEYS_SEARCH_FINDUSAGE,                /**< Keybinding. */
88     GEANY_KEYS_FILE_NEW,                        /**< Keybinding. */
89     GEANY_KEYS_EDITOR_SNIPPETNEXTCURSOR,        /**< Keybinding. */
90     GEANY_KEYS_NOTEBOOK_SWITCHTABRIGHT,         /**< Keybinding. */
91     GEANY_KEYS_FILE_SAVE,                       /**< Keybinding. */
92     GEANY_KEYS_FORMAT_INCREASEINDENTBYSPACE,    /**< Keybinding. */
93     GEANY_KEYS_SEARCH_FINDNEXT,                 /**< Keybinding. */
94     GEANY_KEYS_GOTO_TOGGLEMARKER,               /**< Keybinding. */
95     GEANY_KEYS_GOTO_TAGDEFINITION,              /**< Keybinding. */
96     GEANY_KEYS_SEARCH_NEXTMESSAGE,              /**< Keybinding. */
97     GEANY_KEYS_EDITOR_DELETELINETOEND,          /**< Keybinding. */
98     GEANY_KEYS_FORMAT_AUTOINDENT,               /**< Keybinding. */
99     GEANY_KEYS_FILE_OPENSELECTED,               /**< Keybinding. */
100     GEANY_KEYS_GOTO_BACK,                       /**< Keybinding. */
101     GEANY_KEYS_INSERT_DATE,                     /**< Keybinding. */
102     GEANY_KEYS_BUILD_PREVIOUSERROR,             /**< Keybinding. */
103     GEANY_KEYS_GOTO_LINEENDVISUAL,              /**< Keybinding. */
104     GEANY_KEYS_DOCUMENT_REPLACESPACES,          /**< Keybinding. */
105     GEANY_KEYS_FOCUS_EDITOR,                    /**< Keybinding. */
106     GEANY_KEYS_SELECT_WORDPARTRIGHT,            /**< Keybinding. */
107     GEANY_KEYS_VIEW_MESSAGEWINDOW,              /**< Keybinding. */
108     GEANY_KEYS_FOCUS_SIDEBAR_DOCUMENT_LIST,     /**< Keybinding. */
109     GEANY_KEYS_FORMAT_REFLOWPARAGRAPH,          /**< Keybinding. */
110     GEANY_KEYS_EDITOR_MOVELINEUP,               /**< Keybinding. */
111     GEANY_KEYS_NOTEBOOK_MOVETABLEFT,            /**< Keybinding. */
112     GEANY_KEYS_SELECT_LINE,                     /**< Keybinding. */
113     GEANY_KEYS_EDITOR_UNDO,                     /**< Keybinding. */
114     GEANY_KEYS_EDITOR_MOVELINEDOWN,             /**< Keybinding. */
115     GEANY_KEYS_CLIPBOARD_COPYLINE,              /**< Keybinding. */
116     GEANY_KEYS_BUILD_MAKEOWNTARGET,             /**< Keybinding. */
117     GEANY_KEYS_FORMAT_SENDTOCMD2,               /**< Keybinding. */
118     GEANY_KEYS_SEARCH_MARKALL,                  /**< Keybinding. */
119     GEANY_KEYS_BUILD_LINK,                      /**< Keybinding. */
120     GEANY_KEYS_FILE_CLOSEALL,                   /**< Keybinding. */
121     GEANY_KEYS_GOTO_FORWARD,                    /**< Keybinding. */
122     GEANY_KEYS_CLIPBOARD_CUT,                   /**< Keybinding. */
123     GEANY_KEYS_NOTEBOOK_SWITCHTABLASTUSED,      /**< Keybinding. */
124     GEANY_KEYS_NOTEBOOK_MOVETABRIGHT,           /**< Keybinding. */
125     GEANY_KEYS_BUILD_OPTIONS,                   /**< Keybinding. */
126     GEANY_KEYS_GOTO_TAGDECLARATION,             /**< Keybinding. */
127     GEANY_KEYS_FILE_OPEN,                       /**< Keybinding. */
128     GEANY_KEYS_EDITOR_COMPLETESNIPPET,          /**< Keybinding. */
129     GEANY_KEYS_FORMAT_UNCOMMENTLINE,            /**< Keybinding. */
130     GEANY_KEYS_FOCUS_VTE,                       /**< Keybinding. */
131     GEANY_KEYS_FORMAT_SENDTOCMD1,               /**< Keybinding. */
132     GEANY_KEYS_SELECT_WORDPARTLEFT,             /**< Keybinding. */
133     GEANY_KEYS_VIEW_ZOOMIN,                     /**< Keybinding. */
134     GEANY_KEYS_DOCUMENT_LINEBREAK,              /**< Keybinding. */
135     GEANY_KEYS_EDITOR_REDO,                     /**< Keybinding. */
136     GEANY_KEYS_EDITOR_CONTEXTACTION,            /**< Keybinding. */
137     GEANY_KEYS_SEARCH_FINDPREVSEL,              /**< Keybinding. */
138     GEANY_KEYS_FORMAT_DECREASEINDENTBYSPACE,    /**< Keybinding. */
139     GEANY_KEYS_FORMAT_COMMENTLINETOGGLE,        /**< Keybinding. */
140     GEANY_KEYS_SELECT_ALL,                      /**< Keybinding. */
141     GEANY_KEYS_DOCUMENT_RELOADTAGLIST,          /**< Keybinding. */
142     GEANY_KEYS_BUILD_NEXTERROR,                 /**< Keybinding. */
143     GEANY_KEYS_NOTEBOOK_MOVETABLAST,            /**< Keybinding. */
144     GEANY_KEYS_SELECT_PARAGRAPH,                /**< Keybinding. */
145     GEANY_KEYS_EDITOR_DELETELINE,               /**< Keybinding. */
146     GEANY_KEYS_CLIPBOARD_COPY,                  /**< Keybinding. */
147     GEANY_KEYS_VIEW_SIDEBAR,                    /**< Keybinding. */
148     GEANY_KEYS_FILE_SAVEAS,                     /**< Keybinding. */
149     GEANY_KEYS_FORMAT_COMMENTLINE,              /**< Keybinding. */
150     GEANY_KEYS_GOTO_PREVWORDPART,               /**< Keybinding. */
151     GEANY_KEYS_SEARCH_FINDPREVIOUS,             /**< Keybinding. */
152     GEANY_KEYS_SEARCH_REPLACE,                  /**< Keybinding. */
153     GEANY_KEYS_EDITOR_WORDPARTCOMPLETION,       /**< Keybinding. */
154     GEANY_KEYS_EDITOR_AUTOCOMPLETE,             /**< Keybinding. */
155     GEANY_KEYS_FOCUS_SIDEBAR,                   /**< Keybinding. */
156     GEANY_KEYS_FOCUS_MESSAGE_WINDOW,            /**< Keybinding. */
157     GEANY_KEYS_NOTEBOOK_MOVETABFIRST,           /**< Keybinding. */
158     GEANY_KEYS_GOTO_PREVIOUSMARKER,             /**< Keybinding. */
159     GEANY_KEYS_EDITOR_SCROLLLINEUP,             /**< Keybinding. */
160     GEANY_KEYS_FOCUS_COMPILER,                  /**< Keybinding. */
161     GEANY_KEYS_FORMAT_TOGGLECASE,               /**< Keybinding. */
162     GEANY_KEYS_CLIPBOARD_CUTLINE,               /**< Keybinding. */
163     GEANY_KEYS_DOCUMENT_REMOVE_MARKERS,         /**< Keybinding. */
164     GEANY_KEYS_BUILD_MAKEOBJECT,                /**< Keybinding. */
165     GEANY_KEYS_FORMAT_DECREASEINDENT,           /**< Keybinding. */
166     GEANY_KEYS_FILE_OPENLASTTAB,                /**< Keybinding. */
167     GEANY_KEYS_SEARCH_FINDINFILES,              /**< Keybinding. */
168     GEANY_KEYS_GOTO_NEXTWORDPART,               /**< Keybinding. */
169     GEANY_KEYS_INSERT_LINEAFTER,                /**< Keybinding. */
170     GEANY_KEYS_INSERT_LINEBEFORE,               /**< Keybinding. */
171     GEANY_KEYS_DOCUMENT_REMOVE_MARKERS_INDICATORS,  /**< Keybinding. */
172     GEANY_KEYS_PROJECT_OPEN,                    /**< Keybinding. */
173     GEANY_KEYS_PROJECT_NEW,                     /**< Keybinding. */
174     GEANY_KEYS_PROJECT_CLOSE,                   /**< Keybinding. */
175     GEANY_KEYS_FORMAT_JOINLINES,                /**< Keybinding. */
176     GEANY_KEYS_GOTO_LINESTARTVISUAL,            /**< Keybinding. */
177     GEANY_KEYS_DOCUMENT_CLONE,                  /**< Keybinding. */
178     GEANY_KEYS_FILE_QUIT,                       /**< Keybinding. */
179     GEANY_KEYS_FILE_PROPERTIES,                 /**< Keybinding. */
180     GEANY_KEYS_FORMAT_SENDTOCMD4,               /**< Keybinding. */
181     GEANY_KEYS_FORMAT_SENDTOCMD5,               /**< Keybinding. */
182     GEANY_KEYS_FORMAT_SENDTOCMD6,               /**< Keybinding. */
183     GEANY_KEYS_FORMAT_SENDTOCMD7,               /**< Keybinding. */
184     GEANY_KEYS_FORMAT_SENDTOCMD8,               /**< Keybinding. */
185     GEANY_KEYS_FORMAT_SENDTOCMD9,               /**< Keybinding. */
186     GEANY_KEYS_EDITOR_DELETELINETOBEGINNING,    /**< Keybinding. */
187     GEANY_KEYS_COUNT    /* must not be used by plugins */
188 }
189 
190 struct GeanyKeyGroup;
191 
192 /** Represents a single keybinding action.
193  *
194  * Use keybindings_set_item() to set. */
195 struct GeanyKeyBinding
196 {
197     guint key;              /**< Key value in lower-case, such as @c GDK_a or 0 */
198     GdkModifierType mods;   /**< Modifier keys, such as @c GDK_CONTROL_MASK or 0 */
199     gchar *name;            /**< Key name for the configuration file, such as @c "menu_new" */
200     /** Label used in the preferences dialog keybindings tab.
201      * May contain underscores - these won't be displayed. */
202     gchar *label;
203     /** Function called when the key combination is pressed, or @c NULL to use the group callback
204      * (preferred). @see plugin_set_key_group(). */
205     GeanyKeyCallback callback;
206     GtkWidget *menu_item;   /**< Optional widget to set an accelerator for, or @c NULL */
207     guint id;
208     guint default_key;
209     GdkModifierType default_mods;
210     GeanyKeyBindingFunc cb_func;
211     gpointer cb_data;
212     GDestroyNotify cb_data_destroy;
213 };
214 
215 /** Function pointer type used for keybinding group callbacks.
216  *
217  * You should return @c TRUE to indicate handling the callback. (Occasionally, if the keybinding
218  * cannot apply in the current situation, it is useful to return @c FALSE to allow a later keybinding
219  * with the same key combination to handle it). */
220 alias GeanyKeyGroupCallback = gboolean function(guint key_id);
221 
222 /** Function pointer type used for keybinding callbacks, with userdata for passing context
223  *
224  * You should return @c TRUE to indicate handling the callback. (Occasionally, if the keybinding
225  * cannot apply in the current situation, it is useful to return @c FALSE to allow a later keybinding
226  * with the same key combination to handle it).
227  *
228  * @since 1.26 (API 226) */
229 alias GeanyKeyBindingFunc = gboolean function(GeanyKeyBinding* key, guint key_id, gpointer user_data);
230 
231 /** Function pointer type used for keybinding callbacks. */
232 alias GeanyKeyCallback = void function(guint key_id);
233 
234 @nogc:
235 
236 GeanyKeyBinding* keybindings_get_item(GeanyKeyGroup* group, gsize key_id);
237 
238 GeanyKeyBinding* keybindings_set_item(
239         GeanyKeyGroup* group,
240         gsize key_id,
241         GeanyKeyCallback callback,
242         guint key,
243         GdkModifierType mod,
244         const(gchar)* name,
245         const(gchar)* label,
246         GtkWidget* menu_item
247     );